package cn.actoncode.boot.framework.common.exception.enums;

import com.google.common.collect.Maps;
import lombok.Getter;

import java.util.Map;

/**
 * 抖音小程序错误码
 *
 * @author bin
 */
@Getter
public enum DouyinMaErrorMsgEnum {

    /**
     * access_token 校验失败
     */
    CODE_2(2, "access_token 校验失败"),

    /**
     * access_token 校验失败
     */
    CODE_401(401, "access_token 校验失败"),

    /**
     * 系统异常
     */
    CODE_1000(1000, "系统异常"),

    /**
     * 业务繁忙，请稍后重试
     */
    CODE_1001(1001, "业务繁忙，请稍后重试"),

    /**
     * 签名验证异常，请稍后重试
     */
    CODE_2008(2008, "签名验证异常，请稍后重试"),

    /**
     * 订单已支付
     */
    CODE_5001(5001, "订单已支付"),

    /**
     * 订单已超时，请重新下单
     */
    CODE_5002(5002, "订单已超时，请重新下单"),

    /**
     * access_token不正确或者已过期
     */
    CODE_11016(11016, "access_token不正确或者已过期"),

    /**
     * access_token错误
     */
    CODE_12024(12024, "access_token错误"),

    /**
     * access_token过期或无权限
     */
    CODE_12025(12025, "access_token过期或无权限"),

    /**
     * access_token 错误
     */
    CODE_40002(40002, "access_token 错误"),

    /**
     * access_token 错误
     */
    CODE_40004(40004, "access_token 错误"),

    /**
     * 不合法的 access_token ，请开发者认真比对 access_token 的有效性（如是否过期），或查看是否正在为恰当的公众号调用接口.
     */
    CODE_40014(40014, "未传必要参数，请检查"),

    /**
     * 未传必要参数，请检查
     */
    CODE_40015(40015, "appid 错误"),

    /**
     * appname 错误
     */
    CODE_40016(40016, "appname 错误"),

    /**
     * 未传必要参数，请检查
     */
    CODE_40017(40017, "secret 错误"),

    /**
     * code 错误
     */
    CODE_40018(40018, "code 错误"),

    /**
     * acode 错误
     */
    CODE_40019(40019, "acode 错误"),

    /**
     * 未传必要参数，请检查
     */
    CODE_40020(40020, "grant_type 不是 client_credential"),

    /**
     * 授权小程序未授予该接口对应的权限
     */
    CODE_40036(40036, "授权小程序未授予该接口对应的权限"),

    /**
     * 授权小程序未授予该接口对应的权限
     */
    CODE_28001008(28001008, "access_token错误，请检查该字段是否错误或过期"),

    ;

    private final int code;
    private final String msg;

    DouyinMaErrorMsgEnum(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    static final Map<Integer, String> valueMap = Maps.newHashMap();

    static {
        for (DouyinMaErrorMsgEnum value : DouyinMaErrorMsgEnum.values()) {
            valueMap.put(value.code, value.msg);
        }
    }

    /**
     * 通过错误代码查找其中文含义.
     */
    public static String findMsgByCode(int code) {
        return valueMap.getOrDefault(code, null);
    }
}
